import { message } from 'ant-design-vue';
import moment from 'moment';

export const util = {
  // 遍历tree节点，返回所有没有子节点的节点的 ID，有节点子类提示无法删除
  processNodes(nodes) {
    const idsToDelete = [];
    let hasChildNodes = false; // 用于标记是否有任何节点有子节点
    function traverse(node) {
      // 如果当前节点有子节点
      if (node.children && node.children.length > 0) {
        hasChildNodes = true; // 设置标记为 true
        message.warning(`"${node.name}" 有子节点，无法删除，请先删除子节点。`);
        // 递归处理子节点
        for (const child of node.children) {
          traverse(child);
        }
      } else {
        // 没有子节点，将其 ID 添加到结果数组中
        idsToDelete.push(`${node.id}`);
      }
    }
    // 遍历所有顶层节点
    for (const node of nodes) {
      traverse(node);
    }
    // 如果有子节点，返回空数组，否则返回 idsToDelete
    return hasChildNodes ? [] : idsToDelete;
  },
  /**
     * 递归查找节点
     * @param {Array} nodes - 节点数组
     * @param {string} ids - 要查找的节点 ID数组
     * @returns {Object|null} - 返回找到的节点信息或 null
     */
  findNodeByIds(nodes, ids) {
    const foundNodes = [];
    for (let node of nodes) {
      // 检查当前节点的 ID 是否在传入的 ID 数组中
      if (ids.includes(node.id)) {
        foundNodes.push(node);
      }
      // 递归查找子节点
      if (node.children && node.children.length > 0) {
        const childNodes = this.findNodeByIds(node.children, ids);
        foundNodes.push(...childNodes);
      }
    }
    // 返回找到的所有节点
    return foundNodes;
  },
  // 返回选择的节点层级数
  getNodeDepth(data, id, currentDepth = 1) {
    for (const item of data) {
      if (item.id === id) {
        return currentDepth;
      }
      if (item.children) {
        const depth = this.getNodeDepth(item.children, id, currentDepth + 1);
        if (depth > 0) {
          return depth;
        }
      }
    }
    return 0; // 找不到则返回0
  },
  // 渲染三级下拉tree数据
  filterTreeData(data, currentDepth = 1) {
    return data.reduce((acc, item) => {
      const newItem = { ...item };
      if (currentDepth < 3) {
        // 如果当前深度小于3，允许继续添加子节点
        newItem.children = this.filterTreeData(
          item.children,
          currentDepth + 1
        );
      } else {
        // 第三级分类不再添加子节点
        newItem.children = [];
      }
      // 将新节点添加到结果数组中
      acc.push(newItem);
      return acc;
    }, []);
  },

  // 去除字符串中指定字段前缀的部分
  removePrefix(value, prefix) {
    return value
      .split(',')
      .map(item => item.replace(prefix, ''))
      .join(',');
  },

  // 添加指定前缀并生成字符串
  addPrefixToUserIds(userIds, prefix) {
    return userIds.split(',').map(id => `${prefix}|${id}`).join(',');
  },

  /**
  * 根据阈值格式化时间
  * @param {number|string} issueTime - 发行时间，可以是时间戳（毫秒）或可解析的日期字符串
  * @param {number} [daysThreshold=7] - 时间差阈值（天），默认为7天
  * @returns {string} - 格式化后的时间字符串
  */
  formatIssueTime(issueTime, daysThreshold = 7) {
    // 将 issueTime 转换为毫秒的时间戳
    const issueMoment = moment(issueTime);
    // 检查时间是否有效
    if (!issueMoment.isValid()) {
      return "无效日期格式";
    }
    const now = moment();
    const diffDays = now.diff(issueMoment, "days");
    const diffMinutes = now.diff(issueMoment, "minutes");
    // 根据时间差选择格式
    if (diffDays >= daysThreshold) {
      // 超过阈值，使用年月日时分格式
      return issueMoment.format("YYYY-MM-DD HH:mm");
    } else {
      // 在阈值内，使用相对时间
      if (diffMinutes < 1) {
        return "1分钟前"; // 优化为1分钟前
      } else {
        return issueMoment.from(now);
      }
    }
  },

}

// 定义新增&修改解疑惑分类的表单数据
export const answerFormData = {
  authIssueIds: "",
  authType: 0,
  authPostUser: "<点击选择授权人员>",
  authReplyIds: "",
  userFlag: 0,
  orderFlag: 0,
  anonymousFlag: 0,
  anonymousReplyFlag: 0,
  topNumber: 3,
  description: "",
  imageId: "",
}
